package com.coderg.gmall.product;

import com.coderg.gmall.model.product.*;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @Description
 * @Author CoderG
 * @Date 2025/5/22 20:16
 **/
@FeignClient(value = "service-product", path = "/api/item")
public interface ItemProductFeign {
    /**
     * 获取skuInfo
     *
     * @param skuId
     * @return
     */
    @GetMapping(value = "/getSkuInfo/{skuId}")
    public SkuInfo getSkuInfo(@PathVariable("skuId") Long skuId);

    /**
     * 获取分类视图
     *
     * @param category3Id
     * @return
     */
    @GetMapping(value = "/getBaseCategory/{category3Id}")
    public BaseCategoryView getBaseCategory(@PathVariable("category3Id") Long category3Id);

    /**
     * 获取价格
     *
     * @param skuId
     * @return
     */
    @GetMapping(value = "/getSkuPrice/{skuId}")
    BigDecimal getSkuPrice(@PathVariable("skuId") Long skuId);


    /**
     * 通过skuId,spuId查询 销售属性和值以及标记当前选中的销售属性值
     *
     * @param spuId
     * @param skuId
     * @return
     */
    @GetMapping(value = "/getSpuAttrValueBy/{spuId}/{skuId}")
    List<SpuSaleAttr> getSpuAttrValueBy(@PathVariable("spuId") Long spuId,
                                        @PathVariable("skuId") Long skuId);

    /**
     * 获取销售属性 和具体商品sku值的对应关系 键值对关系返回  sku-->sale_attr_value_id
     *
     * @param spuId
     * @return
     */
    @GetMapping(value = "/getSkuAndSaleBySpuId/{spuId}")
    Map getSkuAndSaleBySpuId(@PathVariable("spuId") Long spuId);

    /**
     * 获取品牌详情B
     *
     * @param tmId
     * @return
     */
    @GetMapping("/getTrademark/{tmId}")
    public BaseTrademark getTrademarkByTmId(@PathVariable("tmId") Long tmId);

    /**
     * 根据skuId查询商品的平台属性
     *
     * @param skuId
     * @return
     */
    @GetMapping("/getAttrList/{skuId}")
    public List<BaseAttrInfo> getAttrList(@PathVariable("skuId") Long skuId);

    /**
     * 扣减库存
     *
     * @param stockpile
     * @return
     */
    @PostMapping("/decreaseStockpile")
    Boolean decreaseStockpile(@RequestBody Map<Long, Integer> stockpile);

    /**
     * 回退库存
     * @param stockMap
     * @return
     */
    @GetMapping("/rollbackStock")
    boolean rollbackStock(@RequestParam Map stockMap);

}
